###回归与分类的区别在于,回归是连续型变量，而后者是预测离散型变量。
import regression
from numpy import *

xArr , yArr = regression.loadDataSet('ex0.txt')
######数据集格式######################
#X0			X			Y
#1.000000	0.067732	3.176513
#1.000000	0.427810	3.816464
#1.000000	0.995731	4.550095
#1.000000	0.738336	4.256571
#########################################
print("xArr[0:2]\n",xArr[0:2])

ws = regression.standRegres(xArr,yArr)
print("ws\n",ws)

#XArr 和 YArr转换为矩阵
xMat = mat(xArr)
yMat = mat(yArr)
yHat = xMat * ws

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
#https://blog.csdn.net/u014159143/article/details/80307717
#x[:,n]就是取所有集合的第n个数据,x[n,:]就是取第n集合的所有数据
#flatten将二维降到一维
ax.scatter(xMat[:,1].flatten().A[0],yMat.T[:,0].flatten().A[0])

#画出Yhat直线
xCopy = xMat.copy()
xCopy.sort(0)#这里要排序重新计算，要不会出现连接的点混乱
yHat = xCopy *ws
ax.plot(xCopy[:,1],yHat)

#plt.show()

#计算的是相关系数	
print("corrcoef(yHat.T , yMat)\n",corrcoef(yHat.T , yMat))

#####################
########局部线性回归#####
xArr , yArr = regression.loadDataSet('ex0.txt')
print("xArr\n",xArr)
print("yArr\n",yArr)
#只预测一个点
print("regression.lwlr(xArr[0],xArr,yArr,1.0)\n",regression.lwlr(xArr[0],xArr,yArr,1.0))
#预测所有点
yHat = regression.lwlrTest(xArr,xArr,yArr,0.003)
print("预测所有点regression.lwlrTest(xArr,xArr,yArr,0.003);\n",yHat)
#画出相关的曲线
#对xArr进行排序
xMat = mat(xArr)
srtInd = xMat[:,1].argsort(0)
xSort = xMat[srtInd][:,0,:]
#绘图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xSort[:,1],yHat[srtInd])
ax.scatter(xMat[:,1].flatten().A[0],mat(yArr).T.flatten().A[0],s=2,c= 'red')
plt.show() 

